package com.sky.common.utils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 课程编号生成器
 * 生成规则：年月日(6位) + 2位随机数
 * 例如：24090101
 */
public class CourseCodeUtil {

    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyMMdd");
    private static final AtomicInteger COUNTER = new AtomicInteger(0);

    /**
     * 生成8位唯一课程编号
     * @return 8位课程编号字符串
     */
    public static String generateCourseCode() {
        // 获取当前日期，格式为yyMMdd
        String datePart = LocalDateTime.now().format(DATE_FORMATTER);

        // 获取两位随机数
        int randomPart = ThreadLocalRandom.current().nextInt(10, 100);

        // 组合成8位编号
        return datePart + randomPart;
    }

    /**
     * 生成8位唯一课程编号（带计数器，确保同一毫秒内不重复）
     * @return 8位课程编号字符串
     */
    public static String generateUniqueCourseCode() {
        String datePart = LocalDateTime.now().format(DATE_FORMATTER);

        // 获取计数器值（0-99循环）
        int counter = COUNTER.getAndUpdate(i -> (i + 1) % 100);

        // 格式化为两位数字
        String counterPart = String.format("%02d", counter);

        return datePart + counterPart;
    }
}